/** 注册信息
 * action 和 reducer 在一个文件
 *  将获取到的用户注册信息 集中放到这个文件管理
 */
import axios from "axios";


//专门判断路由跳转的文件
import { getRedirectPath } from '../util'



//定义 action 的type 
//1. 注册成功信息
const AUTH_SUCCESS = 'AUTH_SUCCESS'
//2. 登陆或注册出错
const ERROR_MSG = 'ERROR_MSG'
//3. 保存info 信息
const LOAD_DATA = 'LOAD_DATA'
const LOGOUT = 'LOGOUT'



//定义初始值
const initState = {
    redirectTo: '',   //跳转判断
    isAuth: false, //登陆是否成功
    msg: '',
    user: '',
    type: ''
}
//reducer
export function user(state = initState, action) {
    switch (action.type) {
        case AUTH_SUCCESS:
            return { ...state, msg: '', redirectTo: getRedirectPath(action.payload), ...action.payload, pwd:'' }
        case LOAD_DATA:
            return { ...state, ...action.payload}
        case ERROR_MSG:
            return { ...state, isAuth: false, msg: action.msg }
        case LOGOUT:
            return {...initState, redirectTo: '/login' }
        default:
            return state
    }
}


function errorMsg(msg) {
    //这里的type 都是 action 
    return { msg, type: ERROR_MSG }
}
function authSuccess(obj) {
    //过滤密码等关键信息
    const {pwd,...data} = obj
    return { type: AUTH_SUCCESS, payload: data }
}

function userInfo(data){
    return { type: LOAD_DATA, payload: data }
}

//bossinfo 信息完善页面保存更新
export function update(data) {
    return dispatch=>{
        axios.post('/user/update', data).then(res=>{
            if (res.status == 200 && res.data.code == 0) {
                dispatch(authSuccess(res.data.data))
            } else {
                dispatch(errorMsg(res.data.msg))
            }
        })
    }
}
export function loadData(){
    return dispatch => {
        axios.get('/user/info').then(res=>{
            dispatch(userInfo(res.data.data))
        })
    }
}

export function login({ user, pwd }) {
    if (!user || !pwd) {
        return errorMsg('用户名密码不能为空')
    }
    //dispatch 负责传送 修改过的数据 
    return (dispatch) => {
        axios.post('/user/login', { user, pwd })
            .then(res => {
                if (res.status == 200 && res.data.code == 0) {
                    dispatch(authSuccess(res.data.data))
                } else {
                    dispatch(errorMsg(res.data.msg))
                }
            })

    }

}

export function register({ user, pwd, repeatpwd, type }) {
    if (!user || !pwd || !type) {
        return errorMsg('用户名密码不能为空')
    }
    // console.log(`${pwd},${repeatpwd}`)
    if (pwd !== repeatpwd) {
        return errorMsg('密码和确认密码不同')
    }

    //dispatch 负责传送 修改过的数据 
    return (dispatch) => {
        axios.post('/user/register', { user, pwd, type })
            .then(res => {
                if (res.status == 200 && res.data.code == 0) {
                    dispatch(authSuccess({ user, pwd, type }))
                } else {
                    dispatch(errorMsg(res.data.msg))
                }
            })

    }

}



//退出登陆
export function logoutSumbit() {
    return {type: LOGOUT}
}




